home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 April
/
EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso
/
EARCD
/
comm
/
tcp
/
Tallahassee.lha
/
Tallahassee
/
pop.e
< prev
next >
Wrap
Text File
|
1996-11-18
|
5KB
|
193 lines
OPT PREPROCESS
MODULE 'exec/nodes','exec/ports',
'rexxsyslib','rexx/storage'
MODULE 'dos/datetime'
MODULE 'dos/dos'
MODULE 'dos/dostags'
MODULE 'dos/dosextens'
MODULE 'dos/var'
DEF my_port:mp
OBJECT myargs
host
port
user
pass
delete
mailbox
ENDOBJECT
DEF pop:myargs,tcphandle,incoming[1024]:STRING,outgoing[1024]:STRING
DEF cpp=FALSE
RAISE 999 IF CtrlC()=TRUE
ENUM LOGINFAILURE,CONNECTIONREFUSED
PROC main() HANDLE
IF FindPort('TALLAHASSEE') THEN cpp:=TRUE
IF processargs()
rexxsysbase:=OpenLibrary('rexxsyslib.library',30)
IF rexxsysbase AND cpp THEN cpp:=TRUE
my_port:=CreateMsgPort()
login()
getmails()
ENDIF
EXCEPT DO
IF tcphandle THEN Close(tcphandle)
IF rexxsysbase THEN CloseLibrary(rexxsysbase)
ENDPROC
PROC processargs()
DEF rdargs,success
pop.port:='110'
pop.delete:=FALSE
pop.mailbox:='*'
IF rdargs:=ReadArgs('HOST/A/K,PORT/K,USER/A/K,PASS/A/K,DELETE/S,MAILBOX/K',pop,NIL)
success:=TRUE
IF pop.mailbox='*' THEN pop.mailbox:='uumail:postmaster'
ELSE
success:=FALSE
ENDIF
ENDPROC success
PROC login()
DEF tcpfile[256]:STRING
StringF(tcpfile,'tcp:\s/\s',pop.host,pop.port)
tcphandle:=Open(tcpfile,NEWFILE)
IF tcphandle
IF in()=FALSE THEN RETURN FALSE
IF out('USER',pop.user) =FALSE THEN RETURN FALSE
IF in()=FALSE THEN RETURN FALSE
IF out('PASS',pop.pass) =FALSE THEN RETURN FALSE
IF in()=FALSE THEN RETURN FALSE
ELSE
RETURN FALSE
ENDIF
ENDPROC
PROC getmails()
DEF mailitems,tempstring[100]:STRING,loop,loopstring[5]:STRING
out('STAT',NIL)
in()
MidStr(tempstring,incoming,InStr(incoming,' ')+1,ALL)
MidStr(tempstring,tempstring,0,InStr(tempstring,' '))
mailitems:=Val(tempstring)
IF cpp THEN sendarexx(mailitems,0)
FOR loop:=1 TO mailitems
StringF(loopstring,'\d',loop)
out('RETR',loopstring)
IF in()=TRUE
IF cpp THEN sendarexx(mailitems,loop) ELSE WriteF('POP: Getting \d of \d Mails\n',loop,mailitems)
getitem()
ENDIF
IF pop.delete
out('DELE',loopstring)
in()
ENDIF
ENDFOR
out('QUIT',NIL)
ENDPROC
PROC getitem()
DEF huh=FALSE,outfile,com[256]:STRING
IF outfile:=Open('t:pop.tmp',NEWFILE)
StringF(com,'Received: from \s \s\n',pop.host,datestr())
Write(outfile,com,EstrLen(com))
REPEAT
huh:=FALSE
ReadStr(tcphandle,incoming)
IF StrCmp(incoming,'.',1) AND EstrLen(incoming)=2 THEN huh:=TRUE
MidStr(incoming,incoming,0,EstrLen(incoming)-1)
IF huh=FALSE
Write(outfile,incoming,EstrLen(incoming))
Write(outfile,'\n',StrLen('\n'))
ENDIF
UNTIL huh
Close(outfile)
ENDIF
StringF(com,'type t:pop.tmp >> \s',pop.mailbox)
Execute(com,NIL,NIL)
ENDPROC
PROC in()
DEF success,check[1]:STRING
success:=ReadStr(tcphandle,incoming)
MidStr(check,incoming,0,1)
IF check:='-' THEN success:=FALSE
IF check:='+' THEN success:=TRUE
->MidStr(incoming,incoming,0,EstrLen(incoming)-1)
ENDPROC (success)
PROC out(command,msgdata)
DEF success=TRUE
StringF(outgoing,'\s \s\n',command,msgdata)
success:=Write(tcphandle,outgoing,EstrLen(outgoing))
ENDPROC (success)
PROC sendarexx(mailitems,mailno)
DEF rc=FALSE
DEF rarg:PTR TO rexxarg
DEF rxmsg:PTR TO rexxmsg
DEF retxmsg:PTR TO rexxmsg
DEF ap:PTR TO mp
DEF test:PTR TO LONG
DEF execmsg:PTR TO mn
DEF node:PTR TO ln
DEF command[256]:STRING
StringF(command,'pop msgno \d msgs \d',mailno,mailitems)
IF rxmsg:=CreateRexxMsg(my_port,NIL,NIL)
execmsg:=rxmsg
node:=execmsg
node.name:='popport'
node.type:=NT_MESSAGE
node.pri:=0
execmsg.replyport:=my_port
IF test:=CreateArgstring(command,EstrLen(command))
CopyMem({test},rxmsg.args,4)
rxmsg.action:=RXCOMM+RXFF_RESULT+RXFF_STRING
rxmsg.passport:=my_port
rxmsg.stdin:=Input()
rxmsg.stdout:=Output()
Forbid()
ap:=FindPort('TALLAHASSEE')
IF ap
PutMsg(ap,rxmsg)
ENDIF
Permit()
IF ap
WaitPort(my_port)
IF retxmsg:=GetMsg(my_port)
rc:=rxmsg.result1 /* return code */
rarg:=rxmsg.result2
ENDIF
ENDIF
IF test THEN ClearRexxMsg(rxmsg,16)
ENDIF
IF rxmsg THEN DeleteRexxMsg(rxmsg)
ENDIF
RETURN rc
ENDPROC
PROC datestr()
ENDPROC
PROC getdate()
DEF dat:datetime,datsta:PTR TO datestamp,tmp[30]:STRING,day[32]:STRING,date[64]:STRING,time[32]:STRING,answer[128]:STRING
/* these are filled by DateToStr() */
/* get stamp in part of datetime structure */
datsta:=DateStamp(dat.stamp)
/* fill datetime structure */
dat.format:=FORMAT_DOS
dat.flags:=DTB_SUBST
dat.strday:=day
dat.strdate:=date
dat.strtime:=time
IF DateToStr(dat)
StringF(answer,'\s, \s \s\n',day,date,time)
ENDIF
ENDPROC answer